/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;

import org.cip.esymons.general.util.ControladorAbstracto;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.model.SelectItem;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.tesoreria.bc.ColegiadoDelegate;
import org.cip.esymons.tesoreria.bc.CuentaIngresoDelegate;
import org.cip.esymons.tesoreria.bc.ProcesoElectoralDelegate;
import org.cip.esymons.tesoreria.bc.VotacionColegiadoDelegate;
import org.cip.esymons.tesoreria.be.CuentaIngreso;
import org.cip.esymons.tesoreria.be.EnumEstadoProcesoElectoral;
import org.cip.esymons.tesoreria.be.EnumEstadoVotacionColegiado;
import org.cip.esymons.tesoreria.be.EnumTipoMulta;
import org.cip.esymons.tesoreria.be.ProcesoElectoral;
import org.cip.esymons.tesoreria.be.VotacionColegiado;

/**
 *
 * @author Ingrid Capuñay
 */
public class ProcesoElectoralController extends ControladorAbstracto {

    private ProcesoElectoralDelegate delegado;
    private ProcesoElectoral procesoElectoral;
    private String filtroNombre;
    private CuentaIngresoDelegate delegadoCuentaIngreso;
    private ColegiadoDelegate delegadoColegiadoDeTesoreria;
    private VotacionColegiado votacionColegiadoNuevo;
    private VotacionColegiadoDelegate delegadoVotacionColegiado;

    public ProcesoElectoralController() {
        delegado = new ProcesoElectoralDelegate();
        delegadoCuentaIngreso=new CuentaIngresoDelegate();
        delegadoColegiadoDeTesoreria=new ColegiadoDelegate();
        delegadoVotacionColegiado=new VotacionColegiadoDelegate();

    }

    /**
     * @return the procesoElectoral
     */
    public ProcesoElectoral getProcesoElectoral() {
        return procesoElectoral;
    }

    /**
     * @param procesoElectoral the procesoElectoral to set
     */
    public void setProcesoElectoral(ProcesoElectoral procesoElectoral) {
        this.procesoElectoral = procesoElectoral;
    }

    public ProcesoElectoral buscarPorCodigo(Long id){
        try{
            return delegado.buscarUnProcesoElectoral(id);
        }catch(Exception ex){
            return null;
        }
    }
    public SelectItem[] getProcesosElectoralesItems() {
        try {
            List<ProcesoElectoral> lp = delegado.listarTodosProcesosElectorales();
            SelectItem[] select = new SelectItem[lp.size()];
            int i = 0;
            for (ProcesoElectoral pe : lp) {
                SelectItem item = new SelectItem(pe, pe.getNombre());
                select[i++] = item;
            }
            return select;

        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null,"No existen Procesos Electorales");
            select[0] = item;
            return select;
        }
    }

    public SelectItem[] getEnumTipoMultaItems() {
        try {
            SelectItem[] select = new SelectItem[EnumTipoMulta.values().length];
            int i = 0;
            for (EnumTipoMulta en : EnumTipoMulta.values()) {
                SelectItem item = new SelectItem(en, en.name());
                select[i++] = item;
            }

            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Tipos de Multas");
            select[0] = item;
            return select;
        }
    }

    public SelectItem[] getProcesosElectoralesENPROCESOItems() {
        try {
            List<ProcesoElectoral> lpep = delegado.procesosElectoralesENPROCESO();
            SelectItem[] select = new SelectItem[lpep.size()];
            int i = 0;
            for (ProcesoElectoral pe : lpep) {
                SelectItem item = new SelectItem(pe, pe.getNombre());
                select[i++] = item;
            }
            return select;

        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null,"No existen Procesos Electorales");
            select[0] = item;
            return select;
        }
    }

    public SelectItem[] getProcesosElectoralesREALIZADOSItems() {
        try {
            List<ProcesoElectoral> lpec = delegado.procesosElectoralesRealizados();
            SelectItem[] select = new SelectItem[lpec.size()];
            int i = 0;
            for (ProcesoElectoral pe : lpec) {
                SelectItem item = new SelectItem(pe, pe.getNombre());
                select[i++] = item;
            }
            return select;

        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null,"No existen Procesos Electorales ya Realizados");
            select[0] = item;
            return select;
        }
    }
    public String nuevo() {
        procesoElectoral = new ProcesoElectoral();
        return "nuevo";
    }

    public boolean filtrarPorNombre(Object obj) {
        try {
            ProcesoElectoral pe = (ProcesoElectoral) obj;
            if (pe.getNombre().toLowerCase().indexOf(filtroNombre.toLowerCase()) >= 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception ex) {
            return true;
        }
    }

    public String grabar() {        
        Date fechaActual=new Date();
        if((procesoElectoral.getFechaRealizacion().after(procesoElectoral.getFechaInscripcion()))){
//            if (procesoElectoral.getFechaRealizacion().after(fechaActual)){
//                procesoElectoral.setEstado(EnumEstadoProcesoElectoral.En_Proceso);
//                procesoElectoral.setFechaCreacion(fechaActual);
//            }else{
//                procesoElectoral.setEstado(EnumEstadoProcesoElectoral.Realizado);
//                procesoElectoral.setFechaCreacion(fechaActual);
//            }
            procesoElectoral.setEstado(EnumEstadoProcesoElectoral.En_Proceso);
            procesoElectoral.setFechaCreacion(fechaActual);
            delegado.create(procesoElectoral);
            List<Colegiado> listaColeAptos=delegadoColegiadoDeTesoreria.listaColegiadosAptosTemporalmenteParaVotar(procesoElectoral.getFechaInscripcion());
            for(Colegiado cole:listaColeAptos){
                votacionColegiadoNuevo=new VotacionColegiado();
                votacionColegiadoNuevo.setEstado(EnumEstadoVotacionColegiado.Temporal);
                votacionColegiadoNuevo.setProcesoElectoral(procesoElectoral);
                votacionColegiadoNuevo.setColegiado(cole);
                delegadoVotacionColegiado.create(votacionColegiadoNuevo);
            }
        }else{
            info("La Fecha de Realización tiene que ser mayor que la Fecha de Inscripción !");
            return null;
        }
        ControladorAbstracto.info("Se registró con Exito el Nuevo Proceso Electoral. Y se consideraron con estado TEMPORAL a todos los Colegiados Ordinarios y Vitalicios VIVOS");
        return "buscar";
    }

    public String actualizar() {       
        if((procesoElectoral.getFechaRealizacion().after(procesoElectoral.getFechaInscripcion()))){            
            delegado.edit(procesoElectoral);
        }else{
            info("La fecha de Realización tiene que ser mayor que la Fecha de Inscripción !");
            return null;
        }
        return "buscar";
    }

    
    public List<ProcesoElectoral> getListaProcesosElectorales() {
        try {
            return delegado.listarTodosProcesosElectorales();
        } catch (Exception ex) {
            return new ArrayList();
        }
    }

    public SelectItem[] getEstadoProcesoElectoralItems() {
        try {
            SelectItem[] select = new SelectItem[EnumEstadoProcesoElectoral.values().length];
            int cont = 0;
            for (EnumEstadoProcesoElectoral e : EnumEstadoProcesoElectoral.values()) {
                select[cont] = new SelectItem(e, e.name());
                cont++;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen estados");
            return select;
        }
    }


    public List<CuentaIngreso> autocompletarMultas(Object event) {
        List<CuentaIngreso> lista = new ArrayList();
        String cond = event.toString().toUpperCase();
        try {
            lista = delegadoCuentaIngreso.listarCuentasIngresoPorCondicion(cond);
        } catch (Exception ex) {
            error(ex.toString());
        }
        return lista;
    }

    /*CODIGO para fijar un valor u objeto en otro CONTROLLER destino*/
    public String nuevaCuentaIngreso(){
        CuentaIngresoController cuinco = (CuentaIngresoController) getBean("cuentaIngresoController");
        cuinco.setControladorSolicitante(1); /*llama el Controlador de CuentaIngresoController*/
        cuinco.setCuentaIngreso(new CuentaIngreso());
        return "nuevaCuentaIngreso";
    }
    /*fin de CODIGO*/
    /**
     * @return the filtroNombre
     */
    public String getFiltroNombre() {
        return filtroNombre;
    }

    /**
     * @param filtroNombre the filtroNombre to set
     */
    public void setFiltroNombre(String filtroNombre) {
        this.filtroNombre = filtroNombre;
    }

    /**
     * @return the votacionColegiadoNuevo
     */
    public VotacionColegiado getVotacionColegiadoNuevo() {
        return votacionColegiadoNuevo;
    }

    /**
     * @param votacionColegiadoNuevo the votacionColegiadoNuevo to set
     */
    public void setVotacionColegiadoNuevo(VotacionColegiado votacionColegiadoNuevo) {
        this.votacionColegiadoNuevo = votacionColegiadoNuevo;
    }
   
}
